การตั้งค่าที่จำเป็นเพื่อ Deploy Laravel ด้วย Elastic Beanstalk
ครั้งนี้ผมจะมาทำ การตั้งค่าที่จำเป็นเพื่อ Deploy Laravel ด้วย Elastic Beanstalk ครับ
กรณีที่ทำการ Deploy Laravel ด้วย Elastic Beanstalk จำเป็นต้องตั้งค่าดังต่อไปนี้ครับ
1. เพิ่มการตั้งค่าของ nginx
สร้างโฟลเดอร์และไฟล์ ".platform/nginx/conf.d/elasticbeanstalk/laravel.conf" จากนั้น nginx ก็จะเริ่มต้นระบบหลังจากมีไฟล์สำหรับการตั้งค่า nginx ในขณะที่ Deploy ซึ่งในส่วนนี้เป็นการตั้งค่าสำหรับ Laravel โดยเฉพาะการดำเนินการตั้งค่าดังต่อไปนี้
สร้าง: [.platform/nginx/conf.d/elasticbeanstalk/laravel.conf
] และ Copy Code นี้วางที่ไฟล์laravel.conf
location / { try_files $uri $uri/ /index.php?$query_string; }
2. เกี่ยวกับ laravel.log
ถ้าไม่มี storage/logs/ ในไฟล์ zip ที่จะทำการ Deploy ตอนที่สร้าง log ก็จะเกิด Error และถ้าไม่ได้รับการอนุญาตให้เขียนข้อมูลก็จะเกิด Error เช่นกัน ในทางกลับกันถ้า laravel.log มีข้อมูลเหลืออยู่ก่อนที่จะทำการ Deploy ก็จะเป็นสาเหตุทำให้ Error ได้เหมือนกัน ดังนั้นควรเคลียร์ข้อมูลออกให้หมดก่อน ซึ่งหมายความว่าก่อนที่จะสร้างไฟล์ zip ให้ทำการรันคำสั่งดังต่อไปนี้ก่อนครับ
เมื่อรันคำสั่งนี้แล้ว laravel.log จะมีขนาดไฟล์เป็น 0 พูดง่ายๆคือเป็นการเคลียร์ข้อมูลใน laravel.log นั่นเอง นอกจากนี้ไม่ว่าจะเป็น User แบบไหนก็สามารถดำเนินการคำสั่งนี้ได้ครับ
\cp -f /dev/null storage/logs/laravel.log chmod 666 storage/logs/laravel.log
3 ล้างแคชต่างๆของ laravel
รันคำสั่งต่อไปนี้เพื่อล้างแคชต่างๆเตรียมไว้
php artisan optimize:clear
4. ไฟล์ที่รวมอยู่ในไฟล์ zip และไม่รวมอยู่ในไฟล์ zip
โดยปกติแล้วไฟล์ในโปรเจกต์ laravel ควรจะรวมไว้ในไฟล์ zip ทั้งหมด แล้วก็จะมี [โฟลเดอร์] และ [ไฟล์] ที่จะไม่ทำการรวมอยู่ในไฟล์ zip ด้วย
โฟลเดอร์ ที่ยกเว้นมีดังนี้
.git vendor node_modules public/build public/hot public/storage
ไฟล์ ที่ยกเว้นมีดังนี้
storage/*.key Homestead.json Homestead.yaml npm-debug.log yarn-error.log .idea .vscode
ในกรณีที่สร้างไฟล์ด้วยคำสั่ง zip ไฟล์ dot ( . จะเป็นชื่อไฟล์เริ่มต้น) เนื่องจากว่าได้รับการยกเว้น ดังนั้นจำเป็นต้องเพิ่มอย่างระมัดระวัง
รันคำสั่งด้านล่างนี้เพื่อสร้างไฟล์ zip ตามสิ่งที่เขียนไว้ข้างต้นนี้ครับ (เปลี่ยน [deploy_file_name.zip] ให้เป็นชื่อไฟล์ของคุณ เช่น 20220719_1250.zip เป็นต้น)
zip -r
: คำสั่งสร้างไฟล์ zip
-x
: คำสั่งยกเว้นโฟลเดอร์หรือไฟล์เพื่อไม่ให้รวมใน zip
zip -r [deploy_file_name.zip] * .editorconfig .styleci.yml .ebextensions .platform -x \*/.git/\* vendor/\* node_modules/\* public/build/\* public/hot/\* public/storage/\* storage/\*.key Homestead.json Homestead.yaml npm-debug.log yarn-error.log .idea .vscode
จากนั้นทำการ Download เพื่อเตรียม Deploy แต่ก่อนที่จะทำการ Deploy ให้ดูเนื้อหาในโปรเจกต์ เมื่อเปิดไฟล์มาแล้วจะแสดงหน้าจอแบบนี้ครับ
5. การตั้งค่าอื่นๆ ที่แนะนำ
เนื่องจากว่ามีวิธีการตั้งค่าตามลิงก์เหล่านี้ ให้ดูที่นี่ได้เลยครับ (จะทำหรือไม่ทำก็ได้ แต่ถ้าเป็นไปได้แนะนำให้ทำดีกว่าครับ)
6. การตั้งค่า Elastic Beanstalk
ทำการตั้งค่าจาก Configuration ในขณะที่สร้าง Environment ซึ่งจะต้องตั้งค่า/public
ที่หัวข้อ Document Root ในหน้า Software นอกจากนี้ต้องตั้งค่าตัวแปรสภาพแวดล้อมทั้งหมดที่ใช้ใน Laravel ในหัวข้อ Environment properties ครับ
ข้อควรระวัง: เราต้องทำการเปลี่ยน APP_DEBUG ให้เป็น
false
เพราะว่าถ้าเผยแพร่เป็น APP_DEBUG = true ก็จะทำให้เป็น Security Hole ซึ่งจะทำให้เว็บไซต์เกิดช่องโหว่และไม่ปลอดภัยนั่นเอง ดังนั้นเราควรใส่เป็น [APP_DEBUG = false
] ครับ
เพียงเท่านี้การตั้งค่าที่จำเป็นในการ Deploy Laravel ด้วย Elastic Beanstalk ก็เสร็จเรียบร้อยแล้วครับ
สรุป
การตั้งค่านี้มีความจำเป็นอย่างมาก เพราะถ้า Deploy ไปยัง Elastic Beanstalk โดยที่ไม่ได้ทำการตั้งค่าเหล่านี้ ก็จะทำให้โปรเจกต์มีปัญหาหรือเกิด Error ในขณะรันโปรเจกต์ผ่าน Elastic Beanstalk ได้นั่นเอง ต่อไปก็ไม่ต้องกังวลว่าจะเกิด Error เกี่ยวกับ Permission แล้วครับ